#include <stdio.h>
#include <stdlib.h>

//考虑移植性的问题，才把类型都定义为Item，这就可以随时改为浮点float都可以
typedef int Item;

#define key(A) (A)
//使用宏的一个好处，不用考虑参数的类型
#define less(A, B) (key(A) < key(B))
#define exch(A, B)  \
    {               \
	Item t = A; \
	A = B;      \
	B = t;      \
    }
#define compexch(A, B) \
    if(less(B, A))     \
    exch(A, B)
 

void selection(Item a[],int l,int r){
	int i,j;
	for(i=l;i<r;i++){
		int min = i;
		for(j=i+1;j<=r;j++)
			if(less(a[j],a[min])) min=j;
		exch(a[i],a[min]);
	}
}

main(int argc, char* argv[])
{
    int i, N = atoi(argv[1]), sw = atoi(argv[2]),j=0;
    int* a = malloc(N * sizeof(int));
	printf("%d items\n",N);
    if(sw)
	for(i = 0; i < N; i++) {
	    a[i] = 1000 * (1.0 * rand() / RAND_MAX);
		printf("%d item is %d\n",i,a[i]);
	}
    else
/** 不知道是不是我的知识不够，书本上的例子这段代码运行不起来
	while(scanf("%d", &a[N]) == 1)
	    N++; 
		 */
	while(j<N){
		scanf("%d",&a[j++]);
	}
	//2.调用排序的函数对这些整型进行排序 
	printf("use selection sort method\n");
    selection(a,0,N - 1);
	//3.输出排序后的结果
    for(i = 0; i < N; i++)
		printf("%5d", a[i]);
    printf("\n");
}
